生活随笔
收集整理的這篇文章主要介紹了
第三天2017/03/30(下午:二级指针的(输出)内存模型)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【備用知識——字符串的操作】
模塊講解:數組、數組指針
void *memset(void *s, int ch, size_t n);
函數解釋:將s中當前位置后面的n個字節 (typedef unsigned int size_t )用 ch 替換并返回 s 。
memset:作用是在一段內存塊中填充某個給定的值,它是對較大的結構體或數組進行清零操作的一種最快方法
(
1) 數組首元素的地址和數組地址是兩個不同的概念(類型決定步長!)
例:
int a[
10];a:代表數組首元素的地址 (a代表數組元素類型,即a[
0])&a:數組的地址(&a代表數組類型,即
int [
10])(
2)以一維數組為例
#include <iostream>
using namespace std;
int main()
{
typedef int(MTYPE)[
5];MTYPE
array;
for(
int i =
0; i<
5; i++){
array[i] = i;
cout<<
array[i]<<endl;}MTYPE *pArr = &
array;
for(
int i =
0; i<
5; i++){
cout<<(*pArr )[i]<<endl;}
typedef int(*pMTYPE)[
5]; pMTYPE ptr = &
array;
char (*ptrArr)[
5]; ptrArr = &
array; 首先把一個數組地址賦值給數組指針ptrArr然后用(*ptrArr)去取出該數組的地址最后進行使用,使用方式(*ptrArr)[i]
}
【解讀】
typedef int(MTYPE)[
5];的含義(
3)※【重點來了】數組名加一增加的步長是多少?(【注】多維數組和一維數組不同)
#include <iostream>
using namespace std;
int main()
{
int c1[
5] ;
cout<<(
int)c1 <<endl;
cout<<(
int)(c1+
1)<<endl;
int c2[
3][
5];
cout<<(
int)c2 <<endl;
cout<<(
int)(c2+
1)<<endl; 【總結】
【綜上所述】一維數組名自成一派,多維數組名實質上表示的是數組指針。getchar();
}
常見返回值問題
char* getchar()
{
char p2[
100] =
"AAAA";
return p2;
}
==============================================
二級指針的(輸出)內存模型
#include <iostream>
using namespace std;
struct student
{
char name[
100];
int age;
};
struct student* create1()
{
struct student* s = (
struct student*)
malloc(
sizeof(
struct student));
return s;
}
int create2(
struct student** s)
{
if(s==NULL)
return 0;*s = (
struct student*)
malloc(
sizeof(
struct student));
return 1;
}
int main()
{
struct student *stu1 = NULL;stu1 = create1();
struct student *stu2 = NULL;create2(&stu2);
return 0;
}
二級指針的易犯錯誤模型以及相關知識
(1)
char buf
[100];
(2)編譯器會把
p[i]轉換成*(
p+
i)
總結
以上是生活随笔為你收集整理的第三天2017/03/30(下午:二级指针的(输出)内存模型)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。