tft每日頭條

 > 生活

 > c語言指針與二維數組問題

c語言指針與二維數組問題

生活 更新时间:2024-12-15 18:00:53

c語言指針與二維數組問題?超過一維的n維數組可以轉換為n-1維數組指針,隻是喪失了第一維的長度信息聲明與n維數組等價的n-1維數組指針時,隻需将第一維改寫為指針形式(*)即可,我來為大家科普一下關于c語言指針與二維數組問題?下面希望有你要的答案,我們一起來看看吧!

c語言指針與二維數組問題(C指針數組)1

c語言指針與二維數組問題

超過一維的n維數組可以轉換為n-1維數組指針,隻是喪失了第一維的長度信息。聲明與n維數組等價的n-1維數組指針時,隻需将第一維改寫為指針形式(*)即可。

一維數組名可以轉換為一級指針,也是喪失了長度信息。

char str[12]; char *sp = str; // 注意符号“*”與“[]”一定意義上的等價性 int arr2[3][4]; int (*p2)[4] = arr2; int arr3[3][4][5]; int (*p3)[4][5] = arr3;

對于一維數組,如果其元素是一個指針呢?如:

char* str[12];

等價的指針形式應該怎樣寫?

如前面所述,str對應一級指針,自然,改寫後與二級指針等價了,當然,長度信息也沒有了。

char **strs = str;

看如下實例:

#include <iostream> using namespace std; void print(char *str, int len) { for(int i=0;i<len;i ) cout<<str[i]; cout<<endl; } void print2(char **str, int len) { for(int i=0;i<len;i ) cout<<str[i]<<" "; cout<<endl; } int main() { char alp[12] = "abcdefghijk"; print(alp,12); char* month[12]={"January","February","March", "April","May","June", "July","August","September", "October", "November","December"}; print2(month,12); while(1); return 0; }

我們知道,申請堆内存時,返回一個指針,可以是申請單個或多個内建數據類型(Built-in data type)(或結構體)。當申請的是多個内建數據類型(Built-in data type)(或結構體)時,也就是相當于建立了一個動态一維數組。如果想申請一個n行m列的動态二維數組呢?雖然可以将n行m列的動态二維數組看成一維的n*m個元素的動态一維數組,隻是處理的邏輯要做一些改變,但有沒有辦法可以直接申請一個邏輯上的動态二維數組呢?答案是先建立一個動态的一維指針數組,再循環将每一個指針指向一個動态一維數組。如前面所述,一維指針數組邏輯上等價于一個二維指針。

char **pp = new char*[12]; for(int i=0;i<12;i ) pp[i] = new char[10]; // …… for(int j=0;j<12;j ) delete pp[j]; delete pp;

-End-

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved