#include <stdio.h>
void func(int *p);
void funcar(int ar[]);
int main(void) {
int a[10] = {0,1,2,3,4,5,6,7,8,9};
int *b;
b = a; /* Valid */
// printf("%d", *b[1]); // [X]Wrong, error: invalid type argument of unary ‘*’ (have ‘int’)
printf("%d\n", b
[1]); // array name/label itself acts as the pointer to array printf("%d\n", *(b
+2)); // another way of representing int q[10];
/* However, This is not valid */
// q = a; // [X]Wrong
int c = 10;
// int *d = c; // [X]Wrong
int *d;
d = &c;
// int *d = &c; // alternate way to assign, confusing
// int *b = &a[0];
char *str = "Ninechars";
printf("%p\n", str
); // address of first char of str printf("%p\n", str
+1); // address of second char of str // printf("%s\n", str[1]); // [segfault] warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘int’ [TODO]
printf("%p\n", &str
); // address to head of the string? NO, address of the pointer var str printf("%p\n", &str
+1); // [TODO], difference of 8bytes b/w this and previous address value? [WHY]? printf("%d\n", *str
); // what integer is this? -> whatever can be made from 'N'=78 printf("%d\n", *(str
+1)); // 'i'=105, but why is it taking single byte ints [TODO] printf("%ld\n", sizeof(1)); // 4 bytes, as expected // printf("%s\n", *str); // [?]Wrong, [HOW][WHY], format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘int’[TODO]
// int *f[5] = {213,214,215,216,217}; // [X]Wrong, this is array of pointers
// so the array should contain ptrs not values
char *str2[3] = {"A","B","C"};
// printf("%s\n", str2); // [X]Wrong, expects argument of type ‘char *’, but argument 2 has type ‘char **’
int * i, * l, * s; // three pointers-to-int
int * x, y, z; // x is a pointer, y and z are ints
func(a);
funcar(a); // passing the entire array
return 0;
}
void func(int *p) // passing an array as a pointer
{
}
void funcar(int ar[]) // passing an entire array, not memory efficient
{
// ^even if I give ar[4] as func arg it still displays ar[5] correctly
}
I2luY2x1ZGUgPHN0ZGlvLmg+Cgp2b2lkIGZ1bmMoaW50ICpwKTsKdm9pZCBmdW5jYXIoaW50IGFyW10pOwoKaW50IG1haW4odm9pZCkgewoJaW50IGFbMTBdID0gezAsMSwyLDMsNCw1LDYsNyw4LDl9OwoJaW50ICpiOwoJYiA9IGE7CQkJCQkJLyogVmFsaWQgKi8KCS8vIHByaW50ZigiJWQiLCAqYlsxXSk7IAkvLyBbWF1Xcm9uZywgZXJyb3I6IGludmFsaWQgdHlwZSBhcmd1bWVudCBvZiB1bmFyeSDigJgq4oCZIChoYXZlIOKAmGludOKAmSkKCXByaW50ZigiJWRcbiIsIGJbMV0pOwkJLy8gYXJyYXkgbmFtZS9sYWJlbCBpdHNlbGYgYWN0cyBhcyB0aGUgcG9pbnRlciB0byBhcnJheQoJcHJpbnRmKCIlZFxuIiwgKihiKzIpKTsJLy8gYW5vdGhlciB3YXkgb2YgcmVwcmVzZW50aW5nIAoJaW50IHFbMTBdOwoJLyogSG93ZXZlciwgVGhpcyBpcyBub3QgdmFsaWQgKi8KCS8vIHEgPSBhOwkJCS8vIFtYXVdyb25nCgkKCWludCBjID0gMTA7CgkvLyBpbnQgKmQgPSBjOwkJLy8gW1hdV3JvbmcKCWludCAqZDsKCWQgPSAmYzsKCS8vIGludCAqZCA9ICZjOwkJLy8gYWx0ZXJuYXRlIHdheSB0byBhc3NpZ24sIGNvbmZ1c2luZwoJLy8gaW50ICpiID0gJmFbMF07CglwcmludGYoIiVwICVkXG4iLCAmYywgKmQpOwoJcHJpbnRmKCIlcCAlZFxuIiwgZCwgKmQpOwoJCgljaGFyICpzdHIgPSAiTmluZWNoYXJzIjsKCXByaW50ZigiU3RhcnRcbiIpOwoJcHJpbnRmKCIlc1xuIiwgc3RyKTsKCXByaW50ZigiJXBcbiIsIHN0cik7CS8vIGFkZHJlc3Mgb2YgZmlyc3QgY2hhciBvZiBzdHIKCXByaW50ZigiJXBcbiIsIHN0cisxKTsJLy8gYWRkcmVzcyBvZiBzZWNvbmQgY2hhciBvZiBzdHIKCS8vIHByaW50ZigiJXNcbiIsIHN0clsxXSk7CS8vIFtzZWdmYXVsdF0gd2FybmluZzogZm9ybWF0IOKAmCVz4oCZIGV4cGVjdHMgYXJndW1lbnQgb2YgdHlwZSDigJhjaGFyICrigJksIGJ1dCBhcmd1bWVudCAyIGhhcyB0eXBlIOKAmGludOKAmSBbVE9ET10KCXByaW50ZigiJXBcbiIsICZzdHIpOwkvLyBhZGRyZXNzIHRvIGhlYWQgb2YgdGhlIHN0cmluZz8gTk8sIGFkZHJlc3Mgb2YgdGhlIHBvaW50ZXIgdmFyIHN0cgoJcHJpbnRmKCIlcFxuIiwgJnN0cisxKTsJLy8gW1RPRE9dLCBkaWZmZXJlbmNlIG9mIDhieXRlcyBiL3cgdGhpcyBhbmQgcHJldmlvdXMgYWRkcmVzcyB2YWx1ZT8gW1dIWV0/CglwcmludGYoIiVkXG4iLCAqc3RyKTsJLy8gd2hhdCBpbnRlZ2VyIGlzIHRoaXM/IC0+IHdoYXRldmVyIGNhbiBiZSBtYWRlIGZyb20gJ04nPTc4CglwcmludGYoIiVkXG4iLCAqKHN0cisxKSk7CS8vICdpJz0xMDUsIGJ1dCB3aHkgaXMgaXQgdGFraW5nIHNpbmdsZSBieXRlIGludHMgW1RPRE9dCglwcmludGYoIiVsZFxuIiwgc2l6ZW9mKDEpKTsJLy8gNCBieXRlcywgYXMgZXhwZWN0ZWQKCS8vIHByaW50ZigiJXNcbiIsICpzdHIpOwkvLyBbP11Xcm9uZywgW0hPV11bV0hZXSwgZm9ybWF0IOKAmCVz4oCZIGV4cGVjdHMgYXJndW1lbnQgb2YgdHlwZSDigJhjaGFyICrigJksIGJ1dCBhcmd1bWVudCAyIGhhcyB0eXBlIOKAmGludOKAmVtUT0RPXQoJcHJpbnRmKCJFbmRcbiIpOwoJLy8gaW50ICpmWzVdID0gezIxMywyMTQsMjE1LDIxNiwyMTd9OwkvLyBbWF1Xcm9uZywgdGhpcyBpcyBhcnJheSBvZiBwb2ludGVycwoJCQkJCQkJCQkJLy8gc28gdGhlIGFycmF5IHNob3VsZCBjb250YWluIHB0cnMgbm90IHZhbHVlcwoJY2hhciAqc3RyMlszXSA9IHsiQSIsIkIiLCJDIn07CglwcmludGYoIiVzXG4iLCAqc3RyMik7CglwcmludGYoIiVzXG4iLCAqKHN0cjIrMSkpOwoJLy8gcHJpbnRmKCIlc1xuIiwgc3RyMik7CS8vIFtYXVdyb25nLCBleHBlY3RzIGFyZ3VtZW50IG9mIHR5cGUg4oCYY2hhciAq4oCZLCBidXQgYXJndW1lbnQgMiBoYXMgdHlwZSDigJhjaGFyICoq4oCZCgoJaW50ICogaSwgKiBsLCAqIHM7CQkvLyB0aHJlZSBwb2ludGVycy10by1pbnQKIAlpbnQgKiB4LCB5LCB6OwkJCS8vIHggaXMgYSBwb2ludGVyLCB5IGFuZCB6IGFyZSBpbnRzCgoJZnVuYyhhKTsKCWZ1bmNhcihhKTsJLy8gcGFzc2luZyB0aGUgZW50aXJlIGFycmF5CglyZXR1cm4gMDsKfQoKdm9pZCBmdW5jKGludCAqcCkJLy8gcGFzc2luZyBhbiBhcnJheSBhcyBhIHBvaW50ZXIKewoJcHJpbnRmKCIlZFxuIiwgcFswXSk7CglwcmludGYoIiVkXG4iLCBwWzddKTsKfQoKdm9pZCBmdW5jYXIoaW50IGFyW10pCS8vIHBhc3NpbmcgYW4gZW50aXJlIGFycmF5LCBub3QgbWVtb3J5IGVmZmljaWVudAp7CgkvLyBeZXZlbiBpZiBJIGdpdmUgYXJbNF0gYXMgZnVuYyBhcmcgaXQgc3RpbGwgZGlzcGxheXMgYXJbNV0gY29ycmVjdGx5CglwcmludGYoIiVkXG4iLCBhclszXSk7CglwcmludGYoIiVkXG4iLCBhcls1XSk7Cn0=