Since the beginning of the year, I will be an embedded engineer or an IoT engineer, so I am studying C language. However, when I use C language pointers, I often get the following warning (error).
Warning (error)
#include <stdio.h>
void main()
{
int *pa;
pa = 5;
}
//Post-compile warning
incompatible integer to pointer conversion assigning to 'int *' from 'int' [-Wint-conversion]
The above example is a simple example of assignment failure to a pointer variable, but since it became difficult to understand when various pointers and arrays were involved, the pointers were interpreted as ** pointer level ** to summarize the assignment. Saw.
** Think of pointers and arrays at the level! ** **
What that means ... ** The idea that you can assign to pointers with the same level. ** **
The fluctuation of the pointer level is as follows.
**
Example
#inclde <stdio.h>
void main()
{
//Since it is the time of declaration*When[]The pointer level goes up by the number of!
int icount = 0; //Pointer level 0
int *picount; //Pointer level 1
int **ppicount; //Pointer level 2
int sicount[3][2]; //Pointer level 2
//Because it's an expression&Raises the pointer level,*When[]The pointer level goes down by the number of!
picount = &icount; //icount is pointer level 1
*picount = 1; //picount is pointer level 0
ppicount = &picount; //ppicount is pointer level 2 picount is pointer level 2.
sicount[0][1] = 2; //discount is pointer level 0
Let's consider various patterns at the pointer level with reference to the above example. If you don't know what a pointer is, please refer to Bitter C and Dot Install. Strictly speaking, pointers and arrays are completely different things. Click here for details
Let's sample!
integer
#include <stdio.h>
int main(void)
{
int inum;
int *pinum; /*Pointer level 1*/
pinum = &inum; /*Pointer level 1=Pointer level 1(Level (0+ 1)) */
*pinum = 100; /*Pointer level 0= Pointer level 0*/
printf("%d¥n", inum); // 100
inum = 200;
printf("%d¥n", *pinum); //200
return 0;
}
Array 1
#include <stdio.h>
int main(void)
{
int siarr[4] = {1,2,3,4}; //Pointer level 1
int *pinum; //Pointer level 1
pinum = siarr; //Pointer level 1=Pointer level 1
printf("%d¥n", *pinum); //1
return 0;
}
Array 2
#include <stdio.h>
int main(void)
{
int siarr[4] = {1,2,3,4}; //Pointer level 1
int *pinum; //Pointer level 1
pinum = &siarr[2]; //Pointer level 1=Pointer level 1(level(1 + 1 - 1))
printf("%d¥n", *pinum); //3
return 0;
}
Array 3
#include <stdio.h>
int main(void)
{
int siarr[2][4] = {{1,2,3,4},{10,20,30,40}}; //Pointer level 2
int *pinum; //Pointer level 1
pinum = &siarr[1][2]; //Pointer level 1=Pointer level 1(level(1 + 2 - 2))
printf("%d¥n", *pinum); //30
return 0;
}
Array 4
#include <stdio.h>
int main(void)
{
int siarr[2][4] = {{1,2,3,4},{10,20,30,40}}; //Pointer level 2
int (*pinum)[4]; //Pointer level 2
pinum = siarr; //Pointer level 2=Pointer level 2
printf("%d¥n", pinum[0][2]); //3
return 0;
}
Array 5
#include <stdio.h>
int main(void)
{
int icount;
int siarr[4] = {1,2,3,4}; //Pointer level 1
int *pinum[4]; //Pointer level 2
for(icount = 0; icount < 4; icount++){
pinum[icount] = &siarr[icount]; //Pointer level 1=Pointer level 1(Level 1+1-1)
}
printf("%d¥n", *pinum[1]); //2
return 0;
}
Array 6
#include <stdio.h>
int main(void)
{
char *psstr1[] = {"abc", "def", "ghi"}; //Pointer level 2
char *psstr2[2]; //Pointer level 2
psstr2[1] = psstr1[2]; //Pointer level 1 (level(2 - 1)) =Pointer level 1(level(2 - 1))
printf("%s¥n", psstr2[2]); //Pointer level 1 abc
//%s represents a character string (array). Since the array is pointer level 1, the value must also be pointer level 1.
return 0;
}
Pointer pointer 1
#include <stdio.h>
int main(void)
{
int inum = 5; //Pointer level 0
int *pinum; //Pointer level 1
int **ppinum; //Pointer level 2
pinum = &inum; //Pointer level 1=Pointer level 1(Level (0+ 1))
printf("%d¥n", *pinum); //5
ppinum = &pinum; //Pointer level 2=Pointer level 2 (level (1)+ 1))
printf("%d¥n", **ppinum); //5
return 0;
}
Pointer pointer 2
#include <stdio.h>
int main(void)
{
int icount;
char *psstr[] = {"abc", "def", "ghi"}; //Pointer level 2
char **ppstr; //Pointer level 2
ppstr = psstr; //Pointer level 2
for(icount = 0; icount < 3; icount++){
printf("%s¥n",ppstr[icount]); //Pointer level 1(level(2 - 1)) abc def ghi
}
return 0;
}
That's all for now. Structure and function pointers continue to the next time.
Please note that this is your own style. I want to get used to pointers in this way and be able to write naturally ...
We look forward to your suggestions and harsh opinions.
Recommended Posts